import axios from 'axios'

/**
 * 清理所有认证相关的缓存数据
 */
export function clearAuthCache() {
  console.log('🧹 开始清理认证缓存...')
  
  // 清理 localStorage
  const localStorageKeys = [
    'token',
    'userInfo',
    'permissions',
    'userMenus',
    'user_permissions',
    'menu_permissions'
  ]
  
  localStorageKeys.forEach(key => {
    if (localStorage.getItem(key)) {
      localStorage.removeItem(key)
      console.log(`  ✅ 清理 localStorage.${key}`)
    }
  })
  
  // 清理 sessionStorage
  const sessionStorageKeys = [
    'token',
    'userInfo',
    'permissions',
    'user_permissions'
  ]
  
  sessionStorageKeys.forEach(key => {
    if (sessionStorage.getItem(key)) {
      sessionStorage.removeItem(key)
      console.log(`  ✅ 清理 sessionStorage.${key}`)
    }
  })
  
  // 清理 axios 默认请求头
  const headersToRemove = [
    'Authorization',
    'X-Auth-Token',
    'Authentication',
    'Bearer'
  ]
  
  headersToRemove.forEach(header => {
    if (axios.defaults.headers.common[header]) {
      delete axios.defaults.headers.common[header]
      console.log(`  ✅ 清理 axios header: ${header}`)
    }
  })
  
  console.log('✅ 认证缓存清理完成')
}

/**
 * 检查token是否存在且格式正确
 */
export function validateToken(token?: string): boolean {
  const tokenToCheck = token || localStorage.getItem('token')
  
  if (!tokenToCheck) {
    return false
  }
  
  // 检查token格式（应该是40个字符的十六进制字符串）
  const tokenRegex = /^[a-f0-9]{40}$/i
  return tokenRegex.test(tokenToCheck)
}

/**
 * 安全地设置token
 */
export function setAuthToken(token: string) {
  if (!validateToken(token)) {
    console.error('❌ 无效的token格式:', token)
    return false
  }
  
  console.log('🔑 设置认证token:', token.substring(0, 10) + '...')
  
  localStorage.setItem('token', token)
  axios.defaults.headers.common['Authorization'] = `Token ${token}`
  
  return true
}

/**
 * 获取当前有效的token
 */
export function getAuthToken(): string | null {
  const token = localStorage.getItem('token')
  
  if (!token || !validateToken(token)) {
    console.warn('⚠️ 无效或不存在的token')
    clearAuthCache()
    return null
  }
  
  return token
}

/**
 * 检查用户是否已登录
 */
export function isAuthenticated(): boolean {
  return !!getAuthToken()
}
